home *** CD-ROM | disk | FTP | other *** search
/ Delphi Magazine Collection 2001 / Delphi Magazine Collection 20001 (2001).iso / DISKS / ISSUE18 / SURVIVE / PASS1.PAS < prev    next >
Pascal/Delphi Source File  |  1996-12-09  |  3KB  |  103 lines

  1. unit Pass1;
  2.  
  3. interface
  4.  
  5. uses
  6.   SysUtils, DB, DBTables;
  7.  
  8. function ChangePassword(iAliasName    : PChar;
  9.                         iServerName   : PChar;
  10.                         iDatabaseName : PChar;
  11.                         iUserName     : PChar;
  12.                         iOldPassword  : PChar;
  13.                         iNewPassword  : PChar;
  14.                         var oErrMsg   : PChar): Word; export;
  15.  
  16. implementation
  17.  
  18. uses
  19.   PassInt;
  20.  
  21. type
  22.   ESamePassword = class(Exception);
  23.   EErrorChangingPassword = class(Exception);
  24.  
  25. function ChangePassword;
  26. var
  27.   TempDatabase: TDatabase;
  28.   TempQuery: TQuery;
  29. begin
  30.   Result := cpSuccess;
  31.   StrPCopy(oErrMsg, '');
  32.   try
  33.  
  34.     { Validate the new password }
  35.     if StrIComp(iOldPassword, iNewPassword) = 0 then
  36.       raise ESamePassword.Create('');
  37.  
  38.     { Create a TDatabase structure to connect with }
  39.     TempDatabase := TDatabase.Create(nil);
  40.     try
  41.       with TempDatabase do
  42.       begin
  43.         AliasName := StrPas(iAliasName);
  44.         DatabaseName := 'PasswordChangeDB';
  45.         if Assigned(iServerName) and (StrPas(iServerName) <> '') then
  46.           Params.Values['SERVER NAME'] := StrPas(iServerName);
  47.         if Assigned(iDatabaseName) and (StrPas(iDatabaseName) <> '') then
  48.           Params.Values['DATABASE NAME'] := StrPas(iDatabaseName);
  49.         Params.Values['USER NAME'] := StrPas(iUserName);
  50.         Params.Values['PASSWORD'] := StrPas(iOldPassword);
  51.         LoginPrompt := False;
  52.         Connected := True;
  53.       end;
  54.  
  55.       { Create a query to run the system procedure with }
  56.       TempQuery := TQuery.Create(nil);
  57.       with TempQuery do
  58.       begin
  59.         try
  60.           DatabaseName := TempDatabase.DatabaseName;
  61.  
  62.           { Change the password in the RDBMS and set date of change }
  63.           SQL.Add(Format('execute ChangePassword %s, %s, %s',
  64.                          [StrPas(iUserName),
  65.                           StrPas(iOldPassword),
  66.                           StrPas(iNewPassword)]));
  67.           try
  68.             ExecSQL;
  69.           except
  70.             raise EErrorChangingPassword.Create('');
  71.           end;
  72.  
  73.  
  74.         finally
  75.           Free;
  76.         end;
  77.       end;
  78.     finally
  79.       TempDatabase.Free;
  80.     end;
  81.   except
  82.     on ESamePassword do
  83.     begin
  84.       Result := cpSamePassword;
  85.       StrPCopy(oErrMsg, 'New password cannot be the same as the old password');
  86.     end;
  87.  
  88.     on EErrorChangingPassword do
  89.     begin
  90.       Result := cpErrorChangingPassword;
  91.       StrPCopy(oErrMsg, 'Error changing password');
  92.     end;
  93.  
  94.     on E: Exception do
  95.     begin
  96.       Result := cpUnknown;
  97.       StrPCopy(oErrMsg, E.Message);
  98.     end;
  99.   end;
  100. end;
  101.  
  102. end.
  103.